name: CMake-gcc

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

env:
  CONAN_CMAKE_GENERATOR: Ninja

jobs:
  build:
    strategy:
      matrix:
        build_type: 
        - Release
        - Debug
        - UBsan
        - Asan
        - Tsan
    env:
      BUILD_TYPE: ${{matrix.build_type}}
    # The CMake configure and build commands are platform agnostic and should work equally
    # well on Windows or Mac.  You can convert this to a matrix build if you need
    # cross-platform coverage.
    # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    
    - name: Get Conan
      uses: turtlebrowser/get-conan@v1.0
      
    - name: Setup Ninja
      uses: ashutoshvarma/setup-ninja@v1.1
      
    - name: Install deps
      run: conan install -g cmake -if ${{github.workspace}}/build --build=missing -s build_type=Release -s compiler.libcxx=libstdc++11 .

    - name: Configure CMake
      # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make.
      # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type
      run: cmake -G Ninja -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}

    - name: Build
      # Build your program with the given configuration
      run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}

    - name: Test
      working-directory: ${{github.workspace}}/build
      # Execute tests defined by the CMake configuration.  
      # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
      run: ctest --output-on-failure -C ${{env.BUILD_TYPE}}
      
